// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLCommentHint*;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLStatement_ptr ;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.std::shared<std::list;
#pragma once
#include <string>
#include <list>
#include "../../../sql/ast/SQLStatementImpl.h"
#include "../../../utils/common_ptr.h"

class SQLStatement;
class SQLCommentHint;
class SQLASTVisitor;

class SQLExplainStatement : public SQLStatementImpl
{
public:
  string_ptr type;
  string_ptr format;
  BOOL_ptr extended;
  BOOL_ptr dependency;
  BOOL_ptr authorization;
  BOOL_ptr optimizer;
  SQLStatement_ptr statement;
  SQLCommentHint_list_ptr hints;
  BOOL_ptr parenthesis;

  SQLExplainStatement();

  SQLExplainStatement(DbType_ptr dbType);
  SHAREDOBJECT(SQLExplainStatement);

  SQLStatement_ptr getStatement();

  void setStatement(SQLStatement_ptr statement);

  string_ptr getType();

  void setType(string_ptr type);

  //@Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLCommentHint_list_ptr getHints();

  void setHints(SQLCommentHint_list_ptr hints);

  //@Override
  SQLObject_list_ptr getChildren();

  BOOL_ptr isExtended();

  void setExtended(BOOL_ptr extended);

  BOOL_ptr isDependency();

  void setDependency(BOOL_ptr dependency);

  BOOL_ptr isAuthorization();

  void setAuthorization(BOOL_ptr authorization);

  BOOL_ptr isOptimizer();

  void setOptimizer(BOOL_ptr optimizer);

  string_ptr getFormat();

  void setFormat(string_ptr format);

  BOOL_ptr isParenthesis();

  void setParenthesis(BOOL_ptr parenthesis);
};
